# -*- coding: utf-8 -*-
# with open(filename, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) as file:  
#     # 在这里对文件进行操作  
# 参数说明
# filename：要打开的文件名或文件路径。
# mode：文件打开模式。默认为 'r'（只读模式）。常见的模式有：
    # 'r'：只读模式，文件必须存在。
    # 'w'：写入模式，如果文件不存在则创建它，如果文件存在则覆盖它。
    # 'x'：创建写入模式，如果文件已存在则引发 FileExistsError。
    # 'a'：追加模式，如果文件不存在则创建它，如果文件存在则在末尾追加内容。
    # 'b'：二进制模式，用于处理非文本文件。
    # 't'：文本模式，默认值。
    # '+'：更新模式，允许读写文件。
    # （例如，'rb' 表示以二进制只读模式打开文件，'w+' 表示以读写模式打开文件并覆盖原有内容）
# buffering：设置缓冲策略。默认为 -1，表示使用默认缓冲大小。0 表示无缓冲，1 表示行缓冲，其他正数表示缓冲区大小。
# encoding：用于指定文件的字符编码。默认为 None，表示使用系统默认编码。
# errors：指定编码错误的处理方式。默认为 None，表示使用默认处理方式。
# newline：控制换行符的解析方式。默认为 None，表示使用系统默认换行符。
# closefd：如果文件描述符由 open() 创建（即文件名是字符串或字节对象），则 closefd 的默认值为 True。否则，其默认值为 False。如果 closefd 为 False，并且文件描述符由 open() 创建，则底层文件描述符将保持打开状态，并且文件对象将不会关闭它。
# opener：一个可调用对象，用于打开文件，例如 os.open。默认为 None，表示使用内置的 open() 函数。

# 读取文件
with open('example.txt', 'r') as file:  
    content = file.read()  
    print(content)

# 写入文件
with open('example.txt', 'w') as file:  
    file.write('Message to write.')

# 追加内容到文件
with open('example.txt', 'a') as file:  
    file.write('\nAnother line of text.')

# 写入二进制数据  
with open('binary_file', 'wb') as file:  
    file.write(b'\x00\x01\x02\x03')  
  
# 读取二进制数据  
with open('binary_file', 'rb') as file:  
    data = file.read()  
    print(data)  # 输出: b'\x00\x01\x02\x03'

# 追加内容到文件
with open('binary_file', 'ab') as file:  
    file.write(b'\x00\x01\x02\x03')  

# 不使用with语句打开文件  
file = open('example.txt', 'w+')  
try:  
    content = file.read() # 一次性读取1024个字节
    print(content)  
    file.write('Message to write.\n')
    file.writelines(["12345","123456","1234567"])
    contentLines = file.readlines() # 读取每一行，然后一行一行放在列表内
    print(contentLines)
    contentLine = file.readline() # 读取一行内容，光标移动到第二行首部
    print(contentLine)

finally:  
    # 确保文件被关闭  
    file.close()
# f.write() # 写入数据，接受字符串
# f.writelines() # 写入数据，接受列表
# f.readable()  # 文件是否可读
# f.writable()  # 文件是否可读
# f.closed  # 文件是否关闭
# f.encoding  # 如果文件打开模式为b,则没有该属性
# f.flush()  # 立刻将文件内容从内存刷到硬盘 相当于ctrl+s
# f.tell()  # 查看当前文件指针距离文件开头的位置
# f.seek(offset, whence)  # 移动文件指针
# offset 位移量，以字节为单位
# whence 模式：0：基于文件起始位置（文本和二进制模式都可以使用）；1：基于当前位置（仅二进制模式使用）；2：基于文件末尾（仅二进制模式使用）
# 针对b模式
# str.encode()  # 编码成bytes
# bytes.decode()  # 解码成str
# str(b'\x00\x01\x02\x03','utf-8')  # 解码成str
